package toOffer;

/**
 * <h3>leetcode</h3>
 *
 * @author BigFaceCat
 * @date 2024/3/14 17:07
 * @description <p>最小时间差</p>
 */

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 题目：给定一个 24 小时制（小时:分钟 "HH:MM"）的时间列表，找出列表中任意两个时间的最小时间差并以分钟数表示。
 */
public class toOffer5_3_35 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
//        list.add("00:00");
        list.add("23:59");
        list.add("00:00");

        System.out.println(findMinDifference(list));
    }

    /**
     * 思路：
     * 先把时间都转换成分钟制、再排序，计算两两时间之间的差值，最后找出列表的第一个值也就是最小的值
     *
     * @param timePoints
     * @return
     */
    public static int findMinDifference(List<String> timePoints) {
//        //如果第一个数和最后一个数都是00:00，那么直接输出0
//        if (timePoints.get(0).equals("00:00") && timePoints.get(timePoints.size() - 1).equals("00:00")){
//            return 0;
//        }
//
//        //做判断，如果list的最后一个数是00:00，那么把00:00变为24:00
//        if (timePoints.get(timePoints.size() - 1).equals("00:00")){
//            timePoints.set(timePoints.size() - 1, "24:00");
//        }

        List<Integer> list = new ArrayList<>();
        for (String timePoint : timePoints) {
            //全转换成分钟
            int time = Integer.parseInt(timePoint.substring(0, 2)) * 60 + Integer.parseInt(timePoint.substring(3));
            list.add(time);
        }
        //时间排序
        list = list.stream().sorted().collect(Collectors.toList());
        int temp = list.get(0) - list.get(list.size() - 1) + 24 * 60;
        //两两相减，找出最小差值
        for (int i = 0; i < list.size() - 1; i++) {
            temp = Math.min(list.get(i + 1) - list.get(i), temp);
        }

        return temp;
    }
}
